downcast 0.11.0

Trait for downcasting trait objects back to their original types.
Documentation

downcast   Latest Version

A trait (& utilities) for downcasting trait objects back to their original types.

link to API documentation

example usage

Add to your Cargo.toml:

[dependencies]
downcast = "0.12"

Add to your crate root:

#[macro_use]
extern crate downcast;
  • simple showcases the most simple usage of this library.
  • with_params showcases how to deal with traits who have type parameters.
  • sync_service showcases how to downcast Arc-pointers.

build features

  • std (default) enables all functionality requiring the standard library (Downcast::downcast()).
  • nightly enables all functionality requiring rust nightly (Any::type_name()).

faq

Q: I'm getting the size for values of type XXX cannot be known at compile time errors, what am i doing wrong?

A: Make sure you use the corresponding Any bound along with the Downcast traits. So, Any for Downcast and AnySync for DowncastSync.

Q: Can i cast trait objects to trait objects?

A: No, that is currently no possible in safe rust - and unsafe solutions are very tricky, as well. If you found a solution, feel free to share it!

Q: What is the difference between this and the downcast-rs crate on crates.io?

A: At the moment, there isn't one, really. There was an unfortunate naming clash. You may consider using the other crate, as it is more actively maintained. This one is considered feature-complete and frozen in functionality. Hopefully, one day, the Rust language will make downcasting easier and we will need neither of these crates anymore!